'use strict';
const fiip = require('fiip');
const Format = require('./stdpFormat');

const listeners = {}; //监听指令

const addListener = (port, fun) => {
  if (listeners[port]) {
    console.log('stdp listener %s has been replaced.', port.toString(16));
  }
  listeners[port] = { port, fun };
};
const solve = async (msg, link) => {
  msg.version = msg.body.slice(0, 1);
  msg.control = msg.body.slice(1, 2);
  msg.reserve1 = msg.body.slice(2, 5);
  msg.cmd = msg.body.slice(5, 7);
  msg.index = msg.body.slice(7, 9);
  msg.len = msg.body.slice(9, 11);
  msg.body = msg.body.slice(11);

  if (listeners[0xffff]) {
    await listeners[0xffff].fun(msg, link);
  }
  if (listeners[(msg.cmd[0] << 8) + msg.cmd[1]] && (msg.cmd[0] << 8) + msg.cmd[1] != 0xffff) {
    await listeners[(msg.cmd[0] << 8) + msg.cmd[1]].fun(msg, link);
  } else {
    if (!listeners[0xffff]) console.log('stdp no listener 0xffff.');
    else console.log('stdp no listener 0x%s.', ((msg.cmd[0] << 8) + msg.cmd[1]).toString(16));
  }
};
const start = () => {
  if (!fiip.getProtocol(Format.type)) {
    fiip.addProtocol(Format.type, { solve });
  }
};

const Stdp = { start, addListener, Format };
module.exports = Stdp;
